// #ifndef VUE3
import Vue from 'vue'
import App from './App'
import { $http } from './utils/request.js'
import store from './store/store.js'
import {checkPermission} from './utils/permission.js'
// 将 $http 挂载到 uni 对象上
uni.$http = $http
$http.baseUrl = 'https://linchaochao.com:8443/api'
// console.log = () => {} // 发布阶段，清空
console.log('store加载状态：', store)
console.log('m_user模块状态：', store.state.m_user)

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
    ...App,
    store
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
import App from './App.vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif
// 配置请求拦截器
uni.$http.beforeRequest = function (options) {
  const token = store.state.m_user.token
  uni.showLoading({
    title: '数据加载中......'
  })
  console.log('已进入拦截器')
  console.log('token为',token)
  // token && token.trim()
  if(token !== '') {
    console.log('已有token')
    options.header = {
      'Token' : token
    }
  }
}

// 配置响应拦截器
uni.$http.afterRequest = function() {
  uni.hideLoading()
}

// 封装消息类的提示方法
uni.$showMsg = function (title = '数据加载失败!', duration = 3000) {
  uni.showToast({
    title,
    duration,
    icon: 'none',
    mask: true
  })
}

// 在 main.js 或 utils.js 中定义全局方法
uni.$showModal = function(options = {}) {
  // 默认配置
  const defaultOptions = {
    title: '提示', // 默认标题
    content: '',  // 默认内容
    confirmText: '确定', // 确认按钮文字
    showCancel: false, // 是否显示取消按钮
  };

  // 合并用户配置和默认配置
  const modalOptions = { ...defaultOptions, ...options };

  // 返回 Promise，方便链式调用
  return new Promise((resolve, reject) => {
    uni.showModal({
      ...modalOptions,
      success: (res) => {
        if (res.confirm) {
          resolve('用户点击确定'); // 用户点击确定
        } else if (res.cancel) {
          reject('用户点击取消'); // 用户点击取消
        }
      },
      fail: (err) => {
        reject(err); // 模态框调用失败
      }
    });
  });
};

// 页面跳转拦截
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]

list.forEach(item => {
  uni.addInterceptor(item, {
    invoke(e) {
      return checkPermission(e.url)
    }
  })
})


